規約
===========

Yii は「設定より規約 conventions over configurations」を支持します。
規約を守れば、複雑な設定を書いて管理しなくても、洗練された Yii アプリケーションを作成できます。
もちろん、必要なときには、Yii はほぼ全ての面で設定によるカスタマイズが可能です。

下記では Yii プログラミングで推奨される規約を述べます。
便宜上、Yii アプリケーションのインストールされている位置を `WebRoot` であると仮定します。

URL
---

デフォルトでは、Yii は 下記のフォーマットの URL を認識します:

~~~
http://hostname/index.php?r=ControllerID/ActionID
~~~

GET 変数 `r` は [ルート (経路)](/doc/guide/basics.controller#sec-2) を参照し、
Yii によってコントローラとアクションに解決されます。
もし `ActionID` が省略された場合は、コントローラはデフォルトアクション ([CController::defaultAction] で定義されたもの)を使用します。
そして、もし `ControllerID` も省略された場合 (または `r` の変数が無い場合) は、
アプリケーションは ([CWebApplication::defaultController]で定義された) デフォルトのコントローラを使用します。

[CUrlManager] の助けによって、`http://hostname/ControllerID/ActionID.html` の様な、より SEO フレンドリーな URL を作成・認識することが可能です。
この機能については、[URL の管理](/doc/guide/topics.url) において詳細にわたって説明しています。

コード
----

Yii は変数名、関数名、クラス名に、キャメルケースを使用することを推奨します。
単語の最初の文字を大文字に変換し、空白を除いて連結します。
変数名と関数名は、クラス名と区別をつけるために、最初の単語の先頭は小文字で始めます (例えば `$basePath`, `runController()`, `LinkPager`)。
プライベートなクラスメンバ変数には、アンダースコアを前置詞に使用することを推奨します (例えば `$_actionList`)。

名前空間が PHP 5.3.0 よりも前のバーションではサポートされていないので、
サードパーティーのクラス名と衝突を避けるために、独自の命名方法を用いる事が推奨されます。
この理由によって、Yii のフレームワークのクラスは全て "C" という文字を前置詞として用いています。

コントローラのクラス名に対する特別な規則は、`Controller` という単語を語尾に追加しなければならない、というものです。
そして、コントローラ ID は、クラス名の先頭を小文字にし、`Controller` の部分を取り除いたものとして定義されます。
例えば `PageController` というクラスは、`page` という ID を持つことになります。
このルールはアプリケーションをより安全にします。
そして、このコントローラに結びついた URL を少し綺麗にします (例えば、`/index.php?r=PageController/index` の代わりに `/index.php?r=page/index` になります)。

初期設定
-------------

初期設定はキーとバリューが対になった配列です。
それぞれのキーは設定されるオブジェクトのプロパティの名前を表し、
それぞれの値は対応するプロパティの初期値です。
例えば `array('name'=>'My application', 'basePath'=>'./protected')` は `name` プロパティと `basePath` プロパティを対応する配列の値で初期化します。

オブジェクトの書き込み可能なプロパティがすべて初期設定可能です。
何も設定しない場合は、プロパティはそのデフォルト値で初期化されます。
プロパティを初期設定するときには、初期値が正しく与えられるように、対応するドキュメントを読むことが有益です。

ファイル
----

ファイルの命名規約と使い方はファイルのタイプによって異なります。

クラスファイルは、それが含むパブリッククラスに従った名前を付けなければいけません。
例えば、[CController] クラスは `CController.php` ファイルに格納されます。
パブリッククラスとは他のクラスから利用される可能性のあるクラスです。
それぞれのクラスファイルは一つまでしかパブリッククラスを含んではいけません。
プライベートクラス (一つのパブリッククラスによってのみ利用されるクラス) はパブリッククラスと同じファイルに入れる事が出来ます。

ビューファイルはビュー名に従って名づけられなければいけません。
例えば、`index` ビューは `index.php` ファイルの中に入ります。
ビューファイルは、HTML と 主に表示目的の PHP コードを含んだ PHP スクリプトファイルです。

初期設定ファイルは自由に名づけることが出来ます。
初期設定ファイルは、初期設定のための連想配列を返す事だけを目的とした PHP スクリプトです。

ディレクトリ
---------

Yii は様々な目的で使用される各種のディレクトリについて、一連のデフォルト名を仮定しています。
それぞれのディレクトリ名は、必要ならばカスタマイズする事が可能です。

   - `WebRoot/protected`: このディレクトリは [アプリケーションベースディレクトリ](/doc/guide/basics.application#sec-3) で、全てのセキュリティセンシティブな PHP スクリプトとデータファイルを保有しています。
Yii はデフォルトでこのパスに結びついた `application` というエイリアスを持っています。
このディレクトリとその下にある全てのものは、ウェブユーザからのアクセスに対して守られていなければなりません。
このディレクトリは [CWebApplication::basePath] によってカスタマイズ可能です。

   - `WebRoot/protected/runtime`: このディレクトリはアプリケーションの実行時に作成されるプライベートな一時ファイルを保有します。
このディレクトリはウェブサーバのプロセスから書き込み可能でなければなりません。
このディレクトリは [CApplication::runtimePath] によってカスタマイズ可能です。

   - `WebRoot/protected/extensions`: このディレクトリは全てのサードパーティ製の拡張ファイルを保有します。
[CApplication::extensionPath] によってカスタマイズ可能です。
Yii はこのパスに対して `ext` というデフォルトエイリアスを持ちます。

   - `WebRoot/protected/modules`: このディレクトリは全てのアプリケーション [モジュール](/doc/guide/basics.module) を保有します。
それぞれのモジュールはサブディレクトリで表現されます。

   - `WebRoot/protected/controllers`: このディレクトリはコントローラのクラスファイルを保有します。
[CWebApplication::controllerPath] によってカスタマイズ可能です。

   - `WebRoot/protected/views`: このディレクトリは、コントローラビュー、レイアウトビュー、システムビューを含む全てのビューファイルを保有します。
[CWebApplication::viewPath] によってカスタマイズ可能です。

   - `WebRoot/protected/views/ControllerID`: このディレクトリは単一のコントローラクラスのビューファイルを保有します。
ここで `ControllerID` はコントローラの ID を意味します。
[CController::viewPath] によってカスタマイズ可能です。

   - `WebRoot/protected/views/layouts`: このディレクトリは全てのレイアウトビューファイルを保有します。
[CWebApplication::layoutPath] によってカスタマイズ可能です。

   - `WebRoot/protected/views/system`: このディレクトリは全てのシステムビューファイルを保有します。
システムビューは例外やエラーを表示する時に使用されるテンプレートです。
[CWebApplication::systemViewPath] によってカスタマイズ可能です。

   - `WebRoot/assets`: このディレクトリは発行されたアセットファイルを保有します。
アセットファイルは、ウェブユーザからアクセス出来るように発行される可能性のあるプライベートなファイルです。
このディレクトリはウェブサーバのプロセスから書き込み可能でなければなりません。
[CAssetManager::basePath] によってカスタマイズ可能です。

   - `WebRoot/themes`: このディレクトリはアプリケーションに適用可能な様々なテーマを保有します。
それぞれのサブディレクトリが、ディレクトリ名と同じ名前を持った一つのテーマを表します。
[CThemeManager::basePath] によってカスタマイズ可能です。

データベース
------------

ほとんどのwebアプリケーションはデータベースを使用しています。
データベースのテーブル名とカラム名については、ベストプラクティスとして、以下の命名規則を提案します。
ただし、これらは Yii による要求ではないことに注意して下さい。

   - データベース名とカラム名は両方とも小文字で名前をつけます。

   - 名前を構成する単語はアンダースコアで連結します (例 `product_order`)。

   - テーブル名は単数形か複数形かのいずれを用いても構いませんが、両方を用いてはいけません。
単純さのため、単数形を推奨します。

   - テーブル名には共通のプレフィクス、例えば`tbl_`を付けても構いません。
これは同一のデータベースに複数のアプリケーションのテーブルが共存するときに特に便利です。
二組のテーブルは異ったテーブル名プレフィクスを付けることにより、容易に分離されます。

<div class="revision">$Id$</div>
